רשימות המוגדרות בצורה רקורסיבית

מבנה נתונים ואלגוריתמים

 

 

אנו יכולים להגדיר רשימה כ:

א.      ריקה

ב.      או, מכילה חוליה וקישור לרשימה.

 

ניתן לסרוק רשימה תוך שימוש בפונקציה רקורסיבית:  כגון: ספירת מספר הפריטים ברשימה:

 

        int ListCount( List l ) {
               if ( l == NULL ) return 0;
               else return 1 + ListCount( l->next );
               }

 

בכל אופן, מסתבר כי מהר יותר לכתוב פונקציה זו ללא קריאה רקורסיבית:

        int ListCount( List l ) {
               int cnt = 0;
               while ( l != NULL ) {
                       cnt++;
                       l = l->next;
                       }
               return cnt;
        }

 

תקורת הקריאות לפונקציה הינה גדולה בכל מחשב, כך שהגרסה האינרטיבית מיושמת מהר יותר.

(פקטור נוסף במחשבים מודרניים הינו ההסתמכות הרבה על ה-cache: הקוד אינטרטיבי הנ"ל איננו משתמש בזיכרון רב מחסנית לקריאה ודבר זה מאפשר שימוש טוב יותר ב-cache.)

 

 

חזור ל: עצים                       חזור ל: תוכן עניינים